package ACWing.SearchAndGraphTheory.拓扑排序;
//848. 有向图的拓扑序列

import java.util.*;

/**
 * @author :chenjie
 * @date :Created 2022/12/25 22:33
 */
public class TopologicalSequenceOFDigraphs {
    static int n,m,idx;
    static int[]e=new int[100010];
    static int[]ne=new int[100010];
    static int[]h=new int[100010];
    static Queue<Integer> queue=new ArrayDeque<>();
    static List<Integer>list=new ArrayList<>();
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        m=sc.nextInt();
        int[]arr=new int[n+1];
        Arrays.fill(h,-1);//注意初始化没有初始化而且数组大小开大的话将会出现超级循环
        for (int i = 1; i <= m; i++) {
            int a=sc.nextInt();
            int b=sc.nextInt();
            add(a,b);
            arr[b]++;
        }
        for (int i = 1; i <= n; i++) {
            if(arr[i]==0){
                queue.add(i);

            }
        }
        if(bfs(arr)){
            for (Integer integer : list) {
                System.out.print(integer+" ");
            }
        }else {
            System.out.println(-1);
        }
    }
    public static void add(int a,int b){//邻接表的生成本人认为的精髓
        e[idx]=b;
        ne[idx]=h[a];
        h[a]=idx++;
    }
    public static boolean bfs(int[]arr){
        while (!queue.isEmpty()){
            int d = queue.remove();
            list.add(d);
            for (int i = h[d]; i!=-1; i=ne[i]) {
                int j=e[i];
                arr[j]--;//本题的主要思路点入度为0即表示在我之前的所有点已经走完了所以我可以入队列去判断出度了
                if(arr[j]==0){
                    queue.add(j);
                }
            }
        }
        if(list.size()==n){
            return true;
        }else {
            return false;
        }
        
    }
}
